package com.ljy.my_study.leetcode.只出现一次的数字II;

import java.util.Arrays;

/**
 * @author lijunying
 * @date 2021/11/19 15:39
 */
public class TestMain {

//    给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
//
//             
//
//    示例 1：
//
//    输入：nums = [2,2,3,2]
//    输出：3
//    示例 2：
//
//    输入：nums = [0,1,0,1,0,1,99]
//    输出：99
//             
//
//    提示：
//
//            1 <= nums.length <= 3 * 104
//            -2^31 <= nums[i] <= 2^31 - 1
//    nums 中，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次
// 
//
//    进阶：你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/single-number-ii
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {
        int[] sums={0,1,0,0};
        System.out.println(new TestMain().singleNumber(sums));
    }

    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        int len=nums.length;
        if(len==1){
            return nums[0];
        }
        if(nums[0]!=nums[1]){
            return nums[0];
        }
        if(nums[len-2]!=nums[len-1]){
            return nums[len-1];
        }
        for(int i=1;i<len-1;i++){
            if(nums[i-1]!=nums[i]&&nums[i]!=nums[i+1]){
                return nums[i];
            }
        }
        return -1;
    }
}
